package org.dromara.system.service;

import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysDictDataBo;
import org.dromara.system.domain.vo.SysDictDataVo;

import java.util.List;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：字典 业务层（数据）
 */
public interface ISysDictDataService {

    /**
     * 查询字典数据列表的分页信息
     * 说明：
     * 1. 该方法通过继承或接口实现获得了注解@Override，表示它重写了父类或接口中的方法。
     * 2. 根据dictData和pageQuery参数，构建动态查询条件和分页查询对象，以实现分页查询功能。
     * 3. 调用了baseMapper的selectVoPage方法，该方法可能是将查询结果转换为SysDictDataVo视图对象的分页数据。
     * 4. 最后，使用TableDataInfo的build静态方法将分页查询结果封装成统一的分页信息返回对象，提供给调用者。
     *
     * @param dictData 字典数据查询条件封装对象
     * @param pageQuery 分页查询条件封装对象
     * @return 返回一个包含字典数据分页信息的对象，具体类型为TableDataInfo<SysDictDataVo>
     */
    TableDataInfo<SysDictDataVo> selectPageDictDataList(SysDictDataBo dictData, PageQuery pageQuery);

    /**
     * 根据条件分页查询字典数据
     *
     * @param dictData 字典数据信息
     * @return 字典数据集合信息
     */
    List<SysDictDataVo> selectDictDataList(SysDictDataBo dictData);

    /**
     * 根据字典类型和字典键值查询字典数据信息
     *
     * @param dictType  字典类型
     * @param dictValue 字典键值
     * @return 字典标签
     */
    String selectDictLabel(String dictType, String dictValue);

    /**
     * 根据字典数据ID查询信息
     *
     * @param dictCode 字典数据ID
     * @return 字典数据
     */
    SysDictDataVo selectDictDataById(Long dictCode);

    /**
     * 批量删除字典数据信息
     *
     * @param dictCodes 需要删除的字典数据ID
     */
    void deleteDictDataByIds(Long[] dictCodes);

    /**
     * 新增保存字典数据信息
     *
     * @param bo 字典数据信息
     * @return 结果
     */
    List<SysDictDataVo> insertDictData(SysDictDataBo bo);

    /**
     * 修改保存字典数据信息
     *
     * @param bo 字典数据信息
     * @return 结果
     */
    List<SysDictDataVo> updateDictData(SysDictDataBo bo);

    /**
     * 校验字典键值是否唯一
     *
     * @param dict 字典数据
     * @return 结果
     */
    boolean checkDictDataUnique(SysDictDataBo dict);

}
